class MyCalendarThree {
public:
    unordered_map<int,pair<int,int> > tree;
    MyCalendarThree() {

    }
    void update(int s,int e,int l,int r,int idx){
        if(s > r || e < l){
            return;
        }
        if(s <= l && e >= r){
            tree[idx].first++;
            tree[idx].second++;
            cout<<l<<" "<<r<<endl;
        }else{
            int mid = l + (r - l) / 2;
            update(s,e,l,mid,idx*2+1);
            update(s,e,mid+1,r,idx*2+2);
            tree[idx].first = tree[idx].second + max(tree[idx*2+1].first,tree[idx*2+2].first);
        }
    }
    int book(int start, int end) {
        update(start,end-1,0,1e9,0);
        cout<<endl;
        return tree[0].first;
    }
};
